package File;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class Demo4 {
    //遍历目录,看某个输入词是否在文件名或者文件内容中存在.
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的目录:");
        String rootPush = scanner.next();
        File rootFile = new File(rootPush);
        if (!rootFile.exists()){
            System.out.println("要扫描的目录不存在!");
            return;
        }
        if (!rootFile.isDirectory()){
            System.out.println("要扫描的路径不是目录!");

            return;
        }
        System.out.println("请输入要搜索的词:");
        String toFind = scanner.next();
        //递归遍历目录
        scanDir(rootFile,toFind);
    }
    private static void scanDir(File rootFile,String toFind) throws IOException {
        File[] files = rootFile.listFiles();
        if (files == null){
            return;
        }
        for (File f :files){
                if (f.isDirectory()){
                    scanDir(f,toFind);
                }else {
                    tryFindInFile(f,toFind);
                }
        }
    }

    //判定toFind是否是文件名,文件内容的一部分
    private static void tryFindInFile(File f, String toFind) throws IOException {
        //是文件名的一部分
        if (f.getName().contains(toFind)){
            System.out.println("找到了文件名匹配的文件: "+ f.getCanonicalPath());
            return;
        }
        //是不是文件内容的一部分
        try(InputStream inputStream = new FileInputStream(f)){
            //把文件内容整个读出来
            StringBuilder stringBuilder = new StringBuilder();
            Scanner scanner = new Scanner(inputStream);
            while (scanner.hasNextLine()){
                stringBuilder.append(scanner.nextLine());
            }
            //读取完毕
            if (stringBuilder.indexOf(toFind) >= 0){
                System.out.println("找到文件内容匹配的文件: " + f.getCanonicalPath());
                return;
            }
        }
    }
}
